分享人:蒋新益
1.背景介绍
2.知识剖析
3.常见问题
4.解决方案
5.编码实战
6.扩展思考
7.参考文献
8.更多讨论
在应用程序中添加日志记录总的来说基于三个目的 :监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析工作;跟踪代码运行时轨迹,作为日后审计的依据;担当集成开发环境中的调试器的作用,向文件或控制台打印代码的调试信息。
最普通的做法就是在代码中嵌入许多的打印语句,这些打印语句可以输出到控制台或文件中,比较好的做法就是构造一个日志操作类 来封装此类操作,而不是让一系列的打印语句充斥了代码的主体。
在强调可重用组件开发的今天,除了自己从头到尾开发一个可重用的日志操作类外, Apache 为我们提供了一个强有力的日志操作包 -Log4j
Log4j 是 Apache 的一个开放源代码项目,通过使用 Log4j ,我们可以控制日志信息输送的目的地是控制台、文件、 GUI 组件、甚至是套接口服 务器、 NT 的事件记录器、 UNIX Syslog 守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就 是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。
关于log4j需要知道以下几点
log4j的配置文件有以下三个方面的内容
1 、根目录(级别和目的地);
2 、目的地(控制台、文件等等);
3 、输出样式
根目录(级别和目的地)
log4j.rootLogger = [ level ] , appenderName, appenderName, …
官方推荐使用的level有四种,从低到高分别是debug,info,warn,error
appenderName是目的地的参数名
目的地(控制台、文件等等)
log4j.appender.appenderName = fully.qualified.name.of.appender.class
log4j提供了5种输出目的地
配置日志信息的格式
log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
log4j提供以下四种格式
1.log4j是通过什么加载的?
2.为什么error了还不停止
3.为什么要用Log4j来替代System.out.println
4.rootcategory和rootLogger有什么区别
应用程序启动时,默认情况下会到src目录下寻找log4j.xml配置文件,若不存在,会继续寻找log4j.properties文件,只要找到其中一个就会加载该配置文件内容
当然也可以手动加载,因为自动加载只会加载log4j.xml或者log4j.properties,如果有不是这个名字或者没有放在根目录中的配置文件需要手动加载
log4j中其实不止4种级别,而是7种
程序员经常会遇到脱离java ide环境调试程序的情况,这时大多数人会选择使用System.out.println语句输出某个变量值的方法进行调试。这样会带来一个非常麻烦的问题:一旦哪天程序员决定不要显示这些System.out.println的东西了就只能一行行的把这些垃圾语句注释掉。若哪天又需调试变量值,则只能再一行行去掉这些注释恢复System.out.println语句,调试代码充斥在逻辑代码中间,既不美观也不利于查找
log4j很好地处理了这一问题,并且system.out只能输出到控制台,而log4j之类的日志工具可以配置输出目标,输出等级,减少输出形式与程序的耦合
其实rootLogger是rootcategory的子类,rootcategory是旧的写法
为什么要使用SLF4J而不是Log4J
SLF4J:即简单日志门面(Simple Logging Facade for Java),不是具体的日志解决方案,它只服务于各种各样的日志系统。按照官方的说法,SLF4J是一个用于日志系统的简单Facade,允许最终用户在部署其应用时使用其所希望的日志系统。
参考三:博客
参考二:csdn anlina_1984
参考三:知乎
欢迎大家交流和讨论
感谢大家观看
BY : 蒋新益